package com.example.comment.service;

import com.example.comment.base.dto.LikeDTO;
import com.example.comment.base.vo.CommentLikeVO;

/**
 * @author QingZeyu
 * @date 2024/5/7 11:06
 */
public interface CommentLikeService {
    /**
     * 检查用户是否点赞了指定的评论
     *
     * @param commentId   评论的ID，不能为空
     * @param userId      用户的ID，不能为空
     * @param referenceId 关联id
     * @return 返回一个布尔值，如果用户点赞了则返回true，否则返回false
     */
    Boolean checkIfLike(Long commentId, Long userId, Long referenceId);

    /**
     * 获取某个评论的点赞数量。
     *
     * @param commentId 评论的ID，用于确定具体的评论。
     * @param referenceId 评论所关联的主体ID，例如文章ID或帖子ID，用于确定评论所属的上下文。
     * @return 返回点赞数量，以Long型表示。
     */
    Long getLikeSize(Long commentId, Long referenceId);

    /**
     * 根据评论ID和用户ID获取评论点赞信息
     *
     * @param commentId   评论的唯一标识符
     * @param userId      用户的唯一标识符
     * @param referenceId 关联id
     * @return 返回一个CommentLikeVO对象，包含特定评论ID和用户ID的点赞信息
     */
    CommentLikeVO getByCommentIdAndUserId(Long commentId, Long userId, Long referenceId);

    /**
     * 处理喜欢操作的逻辑
     *
     * @param dto 包含喜欢操作信息的数据传输对象，例如用户ID和目标对象ID等
     * @return 返回操作结果，如果操作成功则返回true，失败则返回false
     */
    Boolean like(LikeDTO dto);
}
